package com.example.work.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.work.entity.DbUser;
import com.example.work.entity.Dbhosp;
import com.example.work.service.IUserService;
import com.example.work.utils.R;
import com.example.work.utils.TokenUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author: javaLiuwb
 * @date: 2024-11-25 19:30
 * @description:
 */
@RestController
@RequestMapping("/dbuser")
public class DbUserController {

    @Autowired
    private IUserService userService;

    /**
     * 查询用户列表（支持分页）
     * @param name 用户名（可选）
     * @param current 当前页码（默认值为1）
     * @param size 每页大小（默认值为10）
     * @return 分页结果
     */
    @RequestMapping("/list")
    public R list(
            @RequestParam(required = false) String name,
            @RequestParam(value = "current", defaultValue = "1") Integer current,
            @RequestParam(value = "size", defaultValue = "10") Integer size) {

        QueryWrapper<DbUser> queryWrapper = new QueryWrapper<>();
        if (name != null) {
            queryWrapper.eq("user_name", name);
        }

        // 创建分页对象
        Page<DbUser> pageParam = new Page<>(current, size);
        Page<DbUser> userPage = userService.page(pageParam, queryWrapper);

        // 构造返回数据
        Map<String, Object> map = new HashMap<>();
        map.put("total", userPage.getTotal()); // 总记录数
        map.put("pages", userPage.getPages()); // 总页数
        map.put("current", userPage.getCurrent()); // 当前页码
        map.put("size", userPage.getSize()); // 每页大小
        map.put("records", userPage.getRecords()); // 当前页数据

        return R.ok(map);
    }

    // 添加用户
    @RequestMapping("/save")
    public R save(@RequestHeader("Authorization") String authorizationHeader,@RequestBody DbUser dbUser) {
        String userName = TokenUtils.getUserNameFromToken(authorizationHeader);
        if(dbUser.getId()==null){
            Date date = new Date();
            dbUser.setCreateBy(userName); // 设置 create_by 字段，值可以根据实际业务逻辑动态赋值
            dbUser.setCreateTime(date);
            dbUser.setUpdateTime(date);
            userService.save(dbUser);
        }else {
            Date date = new Date();
            dbUser.setUpdateTime(date);
            userService.saveOrUpdate(dbUser);
        }
        return R.ok();
    }

    // 删除用户（逻辑删除）
    @RequestMapping("/delete/{id}")
    public R delete(@PathVariable(value = "id") String id) {
         // 使用 RemoveWrapper 构造删除条件
        QueryWrapper<DbUser> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("id", id);

        // 调用服务层的删除方法
        boolean isDeleted = userService.remove(queryWrapper);

        // 根据删除结果返回响应
        if (isDeleted) {
            return R.ok("删除成功");
        } else {
            return R.error("删除失败，可能记录不存在");
        }
    }
    @PutMapping("/update/{id}")
    public R updateHospById(
            @PathVariable("id") String id, // 使用 @PathVariable 动态路径参数
            @RequestBody DbUser dbUser // 使用 @RequestBody 接收 JSON 数据
    )
    {
        // 打印接收到的 ID
        System.out.println("接收到的用户 ID：" + id);
        // 检查路径中的 Id 是否为空
        if (id == null || id.isEmpty()) {
            return R.error("用户 ID 不能为空");
        }
        // 检查请求体中的数据是否完整
        if (dbUser == null) {
            return R.error("请求体不能为空");
        }
        // 设置 dbUser 对象的 id（确保请求体中的 id 与路径参数一致）
        dbUser.setId(id);
        // 调用服务层更新方法
        boolean isUpdated = userService.updateUserById(dbUser);
        // 返回操作结果
        if (isUpdated) {
            return R.ok("修改成功");
        } else {
            return R.error("修改失败");
        }
    }
    @GetMapping("/all")
    public R getAllHosp() {
        Map<String,Object> map=new HashMap<>();
        map.put("userList",userService.list());
        return R.ok(map);
    }
}
